<!DOCTYPE html>
<html>

<head>
  <title>Suomen Asiakastieto Oy chooses Quarkus for their microservices development</title>
  <script id="adobe_dtm" src="https://www.redhat.com/dtm.js" type="text/javascript"></script>
  <script src="/assets/javascript/highlight.pack.js" type="text/javascript"></script>
  <META HTTP-EQUIV='Content-Security-Policy' CONTENT="default-src 'none'; script-src 'self' 'unsafe-eval' 'sha256-ANpuoVzuSex6VhqpYgsG25OHWVA1I+F6aGU04LoI+5s=' 'sha256-ipy9P/3rZZW06mTLAR0EnXvxSNcnfSDPLDuh3kzbB1w=' js.bizographics.com https://www.redhat.com assets.adobedtm.com jsonip.com https://ajax.googleapis.com https://www.googletagmanager.com https://www.google-analytics.com https://use.fontawesome.com; style-src 'self' https://fonts.googleapis.com https://use.fontawesome.com; img-src 'self' *; media-src 'self' ; frame-src https://www.googletagmanager.com https://www.youtube.com; frame-ancestors 'none'; base-uri 'none'; object-src 'none'; form-action 'none'; font-src 'self' https://use.fontawesome.com https://fonts.gstatic.com;">
  <META HTTP-EQUIV='X-Frame-Options' CONTENT="DENY">
  <META HTTP-EQUIV='X-XSS-Protection' CONTENT="1; mode=block">
  <META HTTP-EQUIV='X-Content-Type-Options' CONTENT="nosniff">
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="description" content="Quarkus: Supersonic Subatomic Java">
  <meta name="twitter:card" content="summary_large_image">
  <meta name="twitter:site" content="@QuarkusIO"> 
  <meta name="twitter:creator" content="@QuarkusIO">
  <meta property="og:url" content="https://quarkus.io/blog/asiakastieto-chooses-quarkus-for-microservices/" />
  <meta property="og:title" content="Suomen Asiakastieto Oy chooses Quarkus for their microservices development" />
  <meta property="og:description" content="Quarkus: Supersonic Subatomic Java" />
  <meta property="og:image" content="/assets/images/quarkus_card.png" />
  <link rel="canonical" href="https://quarkus.io/blog/asiakastieto-chooses-quarkus-for-microservices/">
  <link rel="shortcut icon" type="image/png" href="/favicon.ico" >
  <link rel="stylesheet" href="https://quarkus.io/guides/stylesheet/config.css" />
  <link rel="stylesheet" href="/assets/css/main.css" />
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
  <link rel="alternate" type="application/rss+xml"  href="https://quarkus.io/feed.xml" title="Quarkus">
  <script src="https://quarkus.io/assets/javascript/goan.js" type="text/javascript"></script>
  <script src="https://quarkus.io/assets/javascript/hl.js" type="text/javascript"></script>
</head>

<body class="post">
  <!-- Google Tag Manager (noscript) -->
  <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NJWS5L"
  height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  <!-- End Google Tag Manager (noscript) -->

  <div class="nav-wrapper">
  <div class="grid-wrapper">
    <div class="width-12-12">
      <input type="checkbox" id="checkbox" />
      <nav id="main-nav" class="main-nav">
  <div class="container">
    <div class="logo-wrapper">
      
        <a href="/"><img src="/assets/images/quarkus_logo_horizontal_rgb_600px_reverse.png" class="project-logo" title="Quarkus"></a>
      
    </div>
    <label class="nav-toggle" for="checkbox">
      <i class="fa fa-bars"></i>
    </label>
    <div id="menu" class="menu">
      <span>
        <a href="/get-started/" class="">Get Started</a>
      </span>
      <span>
        <a href="/guides/" class="">Guides</a>
      </span>
      <span>
        <a href="/community/" class="">Community</a>
      </span>
      <span>
        <a href="/support/" class="">Support</a>
      </span>
      <span>
        <a href="/blog/" class="active">Blog</a>
      </span>
      <span>
        <a href="https://code.quarkus.io" class="button-cta secondary white">Start Coding</a>
      </span>
    </div>
  </div>
      </nav>
    </div>
  </div>
</div>

  <div class="content">
    <div class="post-page grid-wrapper">
  <div class="width-8-12 width-12-12-m doc-content">
    <div class="grid-wrapper">
      <div class="width-12-12">
        <p>
          <a href="/blog"><i class="fas fa-angle-left"></i> Back to all posts</a>
        </p>
      </div>
      <div class="width-12-12">
        <div class="post-date">
          February 10, 2020 
          
            <span class="tags"><a href="/blog/tag/user-story">#user-story</a></span>
          
        </div>
        <h1 class="post-title">Suomen Asiakastieto Oy chooses Quarkus for their microservices development</h1>
        <div class="grid-wrapper">
          <div class="width-8-12 width-12-12-m byline-wrapper">
            
            
              <img class="headshot" src="https://www.gravatar.com/avatar/33c2cb775850e595c2dc1dedd88ef98d">
            
            <p class="byline">By Cesar Saavedra</p>
          </div>
          <div class="width-12-12">
              <div id="preamble">
<div class="sectionbody">
<div class="imageblock customer-logo">
<div class="content">
<img src="/assets/images/posts/quarkus-user-stories/asiakastieto/Asiakastieto-logo.png" alt="Asiakastieto logo" width="300">
</div>
</div>
<div class="paragraph">
<p>Based in Helsinki, Finland, The Asiakastieto Group is a leading provider of innovative, digital business and consumer information services in the Nordic region. In the banking, financial services, and retail industries, Asiakastieto’s products and services support risk management, finance and business administration, credit or loan-related  decision-making, sales and marketing.
When the EU introduced its revised Payment Services Directive (PSD2) in 2018 to increase competition, promote innovation, and improve security in the payments industry, Asiakastieto began evaluating how to help its customers manage the impact of the directive. This initiative aligned with one of the company’s key corporate social responsibility goals: to increase trust in society. The Asiakastieto Group has many brands such as UC AB, Intellia Oy, and Suomen Asiakastieto Oy, the latter being the one that we cover in this user story.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="why-microservices"><a class="anchor" href="#why-microservices"></a>Why microservices?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Suomen Asiakastieto Oy has many different departments: Risk Decision, SME &amp; Consumer, Customer Data Management, Digital Processes. Real Estate and Collateral Information, which operates within Digital Processes, had deployed to their application server instance a new application, which happened to have issues while running in production affecting the stability of the application server and hence other applications running on it. This resulted in the need to reboot the application server every time this anomaly occurred leading to unexpected downtime and to a negative customer satisfaction.</p>
</div>
<div class="paragraph">
<p>Because of this, they decided to adopt microservice architectures to introduce better resilience and high-availability into their solutions so that if a microservice or an application went awry, it would not affect the entire system. So, when the time came to start developing their PSD2 project, they decided to start implementing microservices in Thorntail, which is an open source application assembler - similar to Spring Boot - that also implements MicroProfile, an community-driven open source specification for Java microservices. They decided on Thorntail because its functionality and capabilities were close to the application server capabilities they were familiar with. After being in production for a few months, they learned about Quarkus and its innovative approach that rethinks Java for containers, cloud and Kubernetes. Around the same time, they also learned about the end-of-life of Thorntail. Their continued desire to develop new microservices as well as to break their monolithic application servers into microservices made them evaluate Quarkus more in depth.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="their-monoliths-and-existing-microservices"><a class="anchor" href="#their-monoliths-and-existing-microservices"></a>Their monoliths and existing microservices</h2>
<div class="sectionbody">
<div class="paragraph">
<p>With respect to their monoliths, they have about twelve JBoss EAP instances, each running dozens of their applications. As a first step to make the entire system more distributed, they decided to start moving some of these workloads to OpenShift by running many instances of JBoss EAP, each containing a single application. As a result, they experienced high memory consumption. At this point, they started looking into ways to reduce the footprint of these applications running on OpenShift.</p>
</div>
<div class="paragraph">
<p>With respect to their existing Thorntail microservices, which they needed to migrate to Quarkus, they noticed that spinning up a Thorntail container was taking about 1 minute to start up. When they migrated it to Quarkus, the service now starts in 0.4 seconds! With this improved startup time, they could scale up their services faster so that they could be readily available faster to process extra traffic leading to a better customer experience during peak times since customers would not have to wait on the browser to have their requests serviced, for example.</p>
</div>
<div class="paragraph">
<p>In fact, before going into production with Quarkus, Eero Arvonen, Solution Architect at IT Development Finland Asiakasieto Oy, made a comparative analysis between the Thorntail and Quarkus versions of a microservice. This first chart shows a comparison between the original version of one of their Thortail microservices, which used JAX-WS, next to different Quarkus versions of the same microservice.</p>
</div>
<div class="imageblock memory-utilization">
<div class="content">
<img src="/assets/images/posts/quarkus-user-stories/asiakastieto/Asiakastieto-Thorntail-vs-Q-mem-util.png" alt="Asiakastieto memutil" width="1000">
</div>
</div>
<div class="paragraph">
<p>This next chart shows the performance and startup time results for the same combinations of microservice versions as the previous graph.</p>
</div>
<div class="imageblock perf-utilization">
<div class="content">
<img src="/assets/images/posts/quarkus-user-stories/asiakastieto/Asiakastieto-Thorntail-vs-Q-perf.png" alt="Asiakastieto memutil" width="1000">
</div>
</div>
<div class="paragraph">
<p>According to Eero, <em>“migrating from Thorntail to JVM-Quarkus was trivial and memory consumption went down by about 75% while CPU consumption was reduced by about 70%. This was accompanied by a 40% increase in throughput resulting in a faster response time. Migrating to Quarkus native, we found that the application ran at a better throughput even with 50MB of memory which is 95% less than with Thorntail. We also identified a space-time tradeoff between different native Quarkus setups: deploying it with 200MB of memory instead of 50MB will reduce its CPU requirements by two thirds. Thus, if we ever had to balance CPU vs memory within our OpenShift cluster, this would prove useful.”</em></p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="live-coding"><a class="anchor" href="#live-coding"></a>Live Coding</h2>
<div class="sectionbody">
<div class="paragraph">
<p>They use and like the Quarkus development mode, also known as live coding, a lot. Before Quarkus, they used to use JRebel, for hot replacing but it was unreliable. According to Eero <em>“Quarkus development mode has by far a better track record.”</em>  Now that they are writing new microservices, they have made it a best practice to use live coding. With Thorntail, there were manual steps to deploy changes to try them out whereas with Quarkus, the changes are automatically applied to the running process so that the developer can immediately test the application. This makes developers more productive in that they can verify and troubleshoot their code faster.
Eero took it upon himself to deliver a small internal Quarkus workshop, which got developers very excited about this new and innovative technology, <em>“people are looking forward to working with Quarkus”</em>, mentioned Eero. Quarkus is getting developers excited and this has led to other developers across the organization to use Quarkus for their projects.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="learning-quarkus"><a class="anchor" href="#learning-quarkus"></a>Learning Quarkus</h2>
<div class="sectionbody">
<div class="paragraph">
<p><em>“Quarkus was very easy to pick up”</em>, according to Eero. In his opinion, the Quarkus guides on <a href="https://quarkus.io/" class="bare">https://quarkus.io/</a> are very good, thorough and comprehensive with great code examples. In addition, he found a very active community in Quarkus. When they ran into problems, they were able to search the internet for the error messages and easily found answers online. In addition, the Quarkus community and Quarkus engineers are very active even on external forums answering questions and helping folks inquiring for help.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="some-pain-points"><a class="anchor" href="#some-pain-points"></a>Some pain points</h2>
<div class="sectionbody">
<div class="paragraph">
<p>As awesome as Quarkus is, this constantly evolving and innovative technology had some areas for improvement. For example, Eero mentioned that Java API for XML Web Services (JAX-WS) didn’t work on native mode. Also SSL, by default, is disabled but available for HTTP/S, which he needed to use and got it to work following the configuration instructions, which he found complex. In addition, he would like to see improvements in how reflection is currently configured, which was time-consuming to configure because he had to use a trial-and-error approach to get it to work. He’d like to see a way to make this reflection configuration process easier to carry out.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="lessons-learned"><a class="anchor" href="#lessons-learned"></a>Lessons Learned</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Because Quarkus takes the approach of a closed world for application development, there needs to be a bit of a mind shift when writing applications. As an example, for their existing applications, Asiakastieto used a configuration manager to read in configuration information (connection URLs, DB connections strings, etc.) at application startup. Since with Quarkus, in native mode, part of the application startup happens during build time, they had to reconfigure the configuration manager to read in the configuration information when the application was run. Although the change was easy to make, it highlights the importance of understanding how Quarkus applications need to be implemented under this new paradigm.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="current-state-of-quarkus-projects"><a class="anchor" href="#current-state-of-quarkus-projects"></a>Current state of Quarkus projects</h2>
<div class="sectionbody">
<div class="paragraph">
<p>As mentioned earlier, the Asiakastieto Oy PSD2 project had been implemented in Thorntail microservices and when they learned about Quarkus, the decision was made to migrate their Thorntail microservices to Quarkus. As of this writing, out of the 7 Thorntail microservices in their PSD2 application, one has been migrated to Quarkus and is running in production.</p>
</div>
<div class="paragraph">
<p>Two more microservices have been migrated from Thorntail to Quarkus (native mode) and are currently being tested and will be deployed during their next incremental application update during February 2020.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="whats-next"><a class="anchor" href="#whats-next"></a>What’s next</h2>
<div class="sectionbody">
<div class="paragraph">
<p>When their microservices initiative started one and a half years ago, Asiakastieto Oy decided to use Thorntail as their main technology for Java microservices. With the news of the sunsetting of Thorntail and the introduction of Quarkus, they have established a new policy that every new project will be implemented in Quarkus in JVM mode as a minimum and when feasible use Quarkus in native mode. There are already two new projects that are being implemented in Quarkus at present with more coming in the future.</p>
</div>
<div class="paragraph">
<p>For more information on Quarkus:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Quarkus website: <a href="http://quarkus.io" class="bare">http://quarkus.io</a></p>
</li>
<li>
<p>Quarkus GitHub project: <a href="https://github.com/quarkusio/quarkus" class="bare">https://github.com/quarkusio/quarkus</a></p>
</li>
<li>
<p>Quarkus Twitter: <a href="https://twitter.com/QuarkusIO" class="bare">https://twitter.com/QuarkusIO</a></p>
</li>
<li>
<p>Quarkus chat: <a href="https://quarkusio.zulipchat.com/" class="bare">https://quarkusio.zulipchat.com/</a></p>
</li>
<li>
<p>Quarkus mailing list: <a href="https://groups.google.com/forum/#!forum/quarkus-dev" class="bare">https://groups.google.com/forum/#!forum/quarkus-dev</a></p>
</li>
<li>
<p><a href="https://youtube.com/quarkusio">Quarkus YouTube Channel</a></p>
</li>
<li>
<p><a href="https://www.redhat.com/cms/managed-files/cl-4-reasons-try-quarkus-checklist-f19180cs-201909-en.pdf">Four reasons to use Quarkus</a></p>
</li>
</ul>
</div>
</div>
</div>
              
          </div>
          <div class="width-12-12"><div class="share-page">
  <a class="share-linkedin" href="https://www.linkedin.com/shareArticle?mini=true&url=https://quarkus.io/blog/asiakastieto-chooses-quarkus-for-microservices/&title=Suomen Asiakastieto Oy chooses Quarkus for their microservices development" rel="nofollow" target="_blank" title="Share on LinkedIn">
    <img src="/assets/images/share-page/icons_social-linkedin.png"/>
  </a>
  <a class="share-twitter" href="https://twitter.com/intent/tweet?text=Suomen Asiakastieto Oy chooses Quarkus for their microservices development&url=https://quarkus.io/blog/asiakastieto-chooses-quarkus-for-microservices/&via=quarkusio&related=quarkusio" rel="nofollow" target="_blank" title="Share on Twitter">
    <img src="/assets/images/share-page/icons_social-twitter.png"/>
  </a>
  <a class="share-facebook" href="https://facebook.com/sharer.php?u=https://quarkus.io/blog/asiakastieto-chooses-quarkus-for-microservices/" rel="nofollow" target="_blank" title="Share on Facebook">
    <img src="/assets/images/share-page/icons_social-facebook.png"/>
  </a>
  <a class="share-reddit" href="http://www.reddit.com/submit?url=https://quarkus.io/blog/asiakastieto-chooses-quarkus-for-microservices/" onclick="window.open(this.href, 'pop-up', 'left=20,top=20,width=900,height=500,toolbar=1,resizable=0'); return false;" title="Share on Reddit" >
    <img src="/assets/images/share-page/icons_social-reddit.png"/>
  </a>
  <a class="share-email" href="mailto:?subject=Suomen Asiakastieto Oy chooses Quarkus for their microservices development&amp;body=Suomen Asiakastieto Oy chooses Quarkus for their microservices development https://quarkus.io/blog/asiakastieto-chooses-quarkus-for-microservices/" title="Share via Email" >
    <img src="/assets/images/share-page/icons_social-email.png"/>
  </a>
</div>
</div>
        </div>
      </div>
    </div>
  </div>
</div>

  </div>

  <div class="content project-footer">
  <div class="footer-section">
    <div class="logo-wrapper">
      <a href="/"><img src="/assets/images/quarkus_logo_horizontal_rgb_reverse.svg" class="project-logo" title="Quarkus"></a>
    </div>
  </div>
  <div class="grid-wrapper">
    <p class="grid__item width-3-12">Quarkus is open. All dependencies of this project are available under the <a href='https://www.apache.org/licenses/LICENSE-2.0' target='_blank'>Apache Software License 2.0</a> or compatible license.<br /><br />This website was built with <a href='https://jekyllrb.com/' target='_blank'>Jekyll</a>, is hosted on <a href='https://pages.github.com/' target='_blank'>Github Pages</a> and is completely open source. If you want to make it better, <a href='https://github.com/quarkusio/quarkusio.github.io' target='_blank'>fork the website</a> and show us what you’ve got.</p>

    
      <div class="width-1-12 project-links">
        <span>Navigation</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="/">Home</a></li>
          
            <li><a href="/guides">Guides</a></li>
          
            <li><a href="/community/#contributing">Contribute</a></li>
          
            <li><a href="/faq">FAQ</a></li>
          
            <li><a href="/get-started">Get Started</a></li>
          
        </ul>
      </div>
    
      <div class="width-1-12 project-links">
        <span>Contribute</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="https://twitter.com/quarkusio">Follow us</a></li>
          
            <li><a href="https://github.com/quarkusio">GitHub</a></li>
          
            <li><a href="/security">Security&nbsp;policy</a></li>
          
        </ul>
      </div>
    
      <div class="width-1-12 project-links">
        <span>Get Help</span>
        <ul class="footer-links width-1-12">
          
            <li><a href="https://groups.google.com/forum/#!forum/quarkus-dev">Forums</a></li>
          
            <li><a href="https://quarkusio.zulipchat.com">Chatroom</a></li>
          
        </ul>
      </div>
    

    
      <div class="width-3-12 more-links">
        <span>Quarkus is made of community projects</span>
        <ul class="footer-links">
          
            <li><a href="https://vertx.io/" target="_blank">Eclipse Vert.x</a></li>
          
            <li><a href="https://microprofile.io" target="_blank">Eclipse MicroProfile</a></li>
          
            <li><a href="https://hibernate.org" target="_blank">Hibernate</a></li>
          
            <li><a href="https://netty.io" target="_blank">Netty</a></li>
          
            <li><a href="https://resteasy.github.io" target="_blank">RESTEasy</a></li>
          
            <li><a href="https://camel.apache.org" target="_blank">Apache Camel</a></li>
          
            <li><a href="https://code.quarkus.io/" target="_blank">And many more...</a></li>
          
        </ul>
      </div>
    
  </div>
</div>
  <div class="content redhat-footer">
  <div class="grid-wrapper">
    <span class="licence">
      <i class="fab fa-creative-commons"></i><i class="fab fa-creative-commons-by"></i> <a href="https://creativecommons.org/licenses/by/3.0/" target="_blank">CC by 3.0</a> | <a href="https://www.redhat.com/en/about/privacy-policy">Privacy Policy</a>
    </span>
    <span class="redhat">
      Sponsored by
    </span>
    <span class="redhat-logo">
      <a href="https://www.redhat.com/" target="_blank"><img src="/assets/images/redhat_reversed.svg"></a>
    </span>
  </div>
</div>


  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js" integrity="sha384-8gBf6Y4YYq7Jx97PIqmTwLPin4hxIzQw5aDmUg/DDhul9fFpbbLcLh3nTIIDJKhx" crossorigin="anonymous"></script>
  <script type="text/javascript" src="/assets/javascript/mobile-nav.js"></script>
  <script type="text/javascript" src="/assets/javascript/scroll-down.js"></script>
  <script src="/assets/javascript/satellite.js" type="text/javascript"></script>
  <script src="https://quarkus.io/guides/javascript/config.js" type="text/javascript"></script>
  <script src="/assets/javascript/search-filter.js" type="text/javascript"></script>
  <script src="/assets/javascript/back-to-top.js" type="text/javascript"></script>
</body>

</html>
